﻿///////////////////////////////////////////////////////////////////////////////
// 文件名： Camera.hpp
// 作者：   671643387@qq.com
// 日期：   2015年11月1日 下午6:42:40
// 简介：   
///////////////////////////////////////////////////////////////////////////////

#if !defined(GRAPHICS_GRAPHICS_SCENENODE_CAMERA_HPP_)
#define GRAPHICS_GRAPHICS_SCENENODE_CAMERA_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <graphics/Type.hpp>
#include <graphics/graphics/SceneNode.hpp>

namespace graphics
{
    namespace graphics
    {
        class Scene;

        namespace scenenode
        {
            class Camera : public ::graphics::graphics::SceneNode
            {
            public:
                enum Projection
                {
                    Oritho,
                    Perspective
                };

                typedef struct _stProperties
                {
                    Projection projection;

                    float width;
                    float height;

                    float near_;
                    float far_;

                    float fovy;
                    float aspect;

                    ::graphics::stVector3 position;
                    ::graphics::stVector3 lookat;
                    ::graphics::stVector3 upvec;
                }stProperties;

            public:
                Camera(void);
                virtual ~Camera(void);

            public:
                int GetID(void) const;
                int GetIndex(void) const;

                bool BeginFrame(void);
                void EndFrame(void);

                void SetScene(::graphics::graphics::Scene* scene);
                void SetClearColor(::graphics::byte r, ::graphics::byte g, ::graphics::byte b, ::graphics::byte a);

            private:
                int id_;
                int index_;

                ::graphics::dword clearColor_;
                stProperties properties_;

                ::graphics::graphics::Scene* scene_;
            };

            typedef boost::shared_ptr<Camera> CameraPtr;
        }
    }
}

#endif //GRAPHICS_GRAPHICS_SCENENODE_CAMERA_HPP_
